home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1999 / MacHack 1999.toast / The Hacks / DesktopDoubler / Common / Sources / Version.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-23  |  2.9 KB  |  200 lines  |  [TEXT/CWIE]

  1. #define DISABLE_LOCAL_CALLTRACE        1        // Set to 1 to disable Call Traces for this file.
  2. #define DISABLE_LOCAL_DEBUG            0        // Set to 1 to disable all debugging for this file.
  3. #include "DebugUtils.h"
  4.  
  5. #include <Errors.h>
  6. #include <Resources.h>
  7. #include "StringUtils.h"
  8. #include "Version.h"
  9.  
  10.  
  11.  
  12.  
  13.  
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17.  
  18. static OSStatus GetVersResource(Handle *vers);
  19.  
  20. #ifdef __cplusplus
  21. }
  22. #endif
  23.  
  24.  
  25.  
  26.  
  27.  
  28. OSStatus GetNumVersion(NumVersion *vers)
  29. {
  30.     Handle        rez;
  31.     OSStatus    err;
  32.     
  33.     
  34.     // Sanity check input parameters.
  35.     if (!vers)
  36.         return paramErr;
  37.     
  38.     err = GetVersResource(&rez);
  39.     if (err != noErr)
  40.         return err;
  41.     
  42.     *vers = *(NumVersion*)(*rez);
  43.     DisposeHandle(rez);
  44.     return noErr;
  45. }
  46.  
  47.  
  48.  
  49.  
  50.  
  51. OSStatus GetNumVersionCString(char *vers)
  52. {
  53.     OSStatus    err;
  54.     
  55.     
  56.     // Sanity check input parameters.
  57.     if (!vers)
  58.         return paramErr;
  59.     
  60.     err = GetNumVersionPString((StringPtr)vers);
  61.     if (err != noErr)
  62.         return err;
  63.     
  64.     ptocstr(vers,(StringPtr)vers);
  65.     return noErr;
  66. }
  67.  
  68.  
  69.  
  70.  
  71.  
  72. OSStatus GetNumVersionPString(StringPtr vers)
  73. {
  74.     NumVersion    num;
  75.     OSStatus    err;
  76.     
  77.     
  78.     // Sanity check input parameters.
  79.     if (!vers)
  80.         return paramErr;
  81.     
  82.     err = GetNumVersion(&num);
  83.     if (err != noErr)
  84.         return err;
  85.     
  86.     NumVersionToPString(vers,&num);
  87.     return noErr;
  88. }
  89.  
  90.  
  91.  
  92.  
  93.  
  94. char *NumVersionToCString(char *vers,NumVersion *num)
  95. {
  96.     OSStatus    err;
  97.     
  98.     
  99.     // Sanity check input parameters.
  100.     if (!vers || !num)
  101.     {
  102.         if (vers != NULL)
  103.             vers[0] = '\0';
  104.         return vers;
  105.     }
  106.     
  107.     NumVersionToPString((StringPtr)vers,num);
  108.     ptocstr(vers,(StringPtr)vers);
  109.     return vers;
  110. }
  111.  
  112.  
  113.  
  114.  
  115.  
  116. StringPtr NumVersionToPString(StringPtr vers,NumVersion *num)
  117. {
  118.     OSStatus    err;
  119.     
  120.     
  121.     // Sanity check input parameters.
  122.     if (!vers || !num)
  123.     {
  124.         if (vers != NULL)
  125.             vers[0] = '\0';
  126.         return vers;
  127.     }
  128.     
  129.     vers[0] = 0;
  130.     if (num->majorRev & 0xF0)
  131.         vers[++vers[0]] = '0' + ((num->majorRev & 0xF0) >> 4);
  132.     if (num->majorRev & 0x0F)
  133.         vers[++vers[0]] = '0' + (num->majorRev & 0x0F);
  134.     
  135.     vers[++vers[0]] = '.';
  136.     vers[++vers[0]] = '0' + ((num->minorAndBugRev & 0xF0) >> 4);
  137.     if (num->minorAndBugRev & 0x0F)
  138.     {
  139.         vers[++vers[0]] = '.';
  140.         vers[++vers[0]] = '0' + (num->minorAndBugRev & 0x0F);
  141.     }
  142.     
  143.     switch(num->stage)
  144.     {
  145.         case 0x20:        // developStage
  146.             vers[++vers[0]] = 'd';
  147.             break;
  148.         
  149.         case 0x40:        // alphaStage
  150.             vers[++vers[0]] = 'a';
  151.             break;
  152.         
  153.         case 0x60:        // betaStage
  154.             vers[++vers[0]] = 'b';
  155.             break;
  156.         
  157.         case 0x80:        // finalStage
  158.             if (num->nonRelRev)
  159.                 vers[++vers[0]] = 'f';
  160.             break;
  161.     }
  162.     
  163.     if (num->nonRelRev & 0xF0)
  164.         vers[++vers[0]] = '0' + ((num->nonRelRev & 0xF0) >> 4);
  165.     if (num->nonRelRev & 0x0F)
  166.         vers[++vers[0]] = '0' + (num->nonRelRev & 0x0F);
  167.     
  168.     return vers;
  169. }
  170.  
  171.  
  172. #if 0
  173. #pragma mark -
  174. #endif
  175.  
  176.  
  177. OSStatus GetVersResource(Handle *vers)
  178. {
  179.     OSStatus    err;
  180.     
  181.     
  182.     // Sanity check input parameters.
  183.     if (!vers)
  184.         return paramErr;
  185.     
  186.     *vers = Get1Resource('vers',1);
  187.     if (*vers == NULL)
  188.     {
  189.         err = ResError();
  190.         if (err == noErr)
  191.             err = resNotFound;
  192.         
  193.         return err;
  194.     }
  195.     
  196.     DetachResource(*vers);
  197.     HLock(*vers);
  198.     return noErr;
  199. }
  200.